package com.simulation.web.service;

import com.github.pagehelper.PageInfo;
import com.simulation.web.dto.TechPostDTO;
import com.simulation.web.domain.TechPost;
import com.simulation.web.vo.TechPostVO;

import java.util.List;

/**
 * @Author 唐雄杰
 * @Date 2024-07-12 21:46
 **/
public interface PostService {

    /**
     * 分页查询项目
     * @param techPostDTO
     * @return
     */
    PageInfo<TechPostVO> getPage(TechPostDTO techPostDTO);

    /**
     * 查询所有记录
     *
     * @return 返回集合，没有返回空List
     */
    List<TechPostVO> listAll();


    /**
     * 根据主键查询
     *
     * @param id 主键
     * @return 返回记录，没有返回null
     */
    TechPostVO getById(Long id);

    /**
     * 新增，插入所有字段
     *
     * @param techPost 新增的记录
     * @return 返回影响行数
     */
    int insert(TechPost techPost);

    /**
     * 新增，忽略null字段
     *
     * @param techPost 新增的记录
     * @return 返回影响行数
     */
    int insertIgnoreNull(TechPost techPost, String bucketName);

    /**
     * 修改，修改所有字段
     *
     * @param techPost 修改的记录
     * @return 返回影响行数
     */
    int update(TechPost techPost);

    /**
     * 修改，忽略null字段
     *
     * @param techPost 修改的记录
     * @return 返回影响行数
     */
    int updateIgnoreNull(TechPost techPost);

    /**
     * 删除记录
     *
     * @param techPost 待删除的记录
     * @return 返回影响行数
     */
    int delete(TechPost techPost);

    /**
     * 删除记录
     * @param idList
     */
    void deleteById(List<Long> idList);

    /**
     * 更新项目状态
     * @param techPost
     * @return
     */
    int updateStatus(TechPost techPost);

    /**
     * 获取用户关注的项目
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<TechPost> getPostByUserFocused(Integer pageNum, Integer pageSize, Long userId);

    /**
     * 获取用户点赞的项目
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageInfo<TechPost> getPostByUserLikes(Integer pageNum, Integer pageSize, Long userId);

    PageInfo<TechPostVO> getPostByCollectionId(Long collectionId, Integer pageNum, Integer pageSize);

    /**
     * 排行榜
     * @return
     */
    List<TechPostVO> selectViewCount();

    /**
     * 推荐榜
     * @return
     */
    List<TechPostVO> selectFavoriteCount();

    /**
     * id
     * @param userId
     * @return
     */
    List<TechPostVO> selectFollowCount(Long userId);

    /**
     * 查看当前项目是否被当前用户收藏
     * @param userId
     * @param sourceId
     * @return
     */
    Boolean isCopy(Long userId, Long sourceId);

    Long copyPost(TechPost techPost);

    List<TechPostVO> getByIdList(List<Long> idList);

    /**
     * 更新项目空间
     * @param projectId
     * @param workspaceId
     */
    void updatePostWorkspaceId(Long projectId,String workspaceId,String code,String environment);
}